﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Proveedores.TransferObjects;
using System.Data.SqlClient;
using System.Data;

namespace Chilis.Proveedores.DataAccess
{
    using Mapper;

    public sealed class AreaDA
    {
        public static IList<AreaDTO> GetAllArea()
        {
            var resultado = new List<AreaDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Areas"))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetArea());
                }
            }

            return resultado;
        }

        public static AreaDTO GetArea(int idArea)
        {
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Area_Select", idArea))
            {
                reader.Read();
                return reader.GetArea();
            }
        }

        public static int AddCriterio(AreaDTO area)
        {
            try
            {
                var db = Conexion.CrearBaseDatos();

                var proceso = (int)db.ExecuteScalar("pa_Insert_Area",
                                                    area.IdArea,
                                                    area.NombreArea,
                                                    area.EstadoArea);

                return proceso;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public static int UpdateArea(AreaDTO area)
        {
            try
            {
                var db = Conexion.CrearBaseDatos();

                var proceso = (int)db.ExecuteScalar("pa_Update_Area",
                                                    area.IdArea,
                                                    area.NombreArea,
                                                    area.EstadoArea);

                return proceso;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }

        public static bool DeleteArea(int IdArea)
        {
            try
            {
                var db = Conexion.CrearBaseDatos();

                db.ExecuteNonQuery("pa_Delete_Area", IdArea);

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public static IList<AreaDTO> SearchArea(string nombre)
        {
            var resultado = new List<AreaDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Area_Search", nombre))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetArea());
                }
            }

            return resultado;
        }

        public static IList<AreaDTO> SearchAreaName(string nombre)
        {
            var resultado = new List<AreaDTO>();
            var db = Conexion.CrearBaseDatos();
            using (IDataReader reader = db.ExecuteReader("pa_Listar_Area_SearchName", nombre))
            {
                while (reader.Read())
                {
                    resultado.Add(reader.GetArea());
                }
            }

            return resultado;
        }
    }
}
